LambdaにおけるPythonのライブラリのロード順序を調べてみる
こんにちは、CX事業本部の夏目です。
今回はServerless Advent Calendarの投稿ですが、LambdaにおけるLayerも含めたPythonのライブラリのロード順序を調べてみることにしました。
方法
標準でも入っているboto3のバージョンを使って調べます。
- デフォルトで入っているboto3:
1.15.16
(2020/12/19) - Layerの
python/
:1.15.0
- Layerの
python/lib/python3.8/site-packages/
:1.14.0
- デプロイパッケージのルート:
1.13.0
次のコードを実行し、表示されたboto3のバージョンで順番を特定します。
import boto3 def handler(event, context): return boto3.__version__
特定ができたら、そのバージョンのコードを削除して再実行。
4つの順序がわかるまで続けます。
調査
一回目
1.13.0
なので最初に呼ばれるのはデプロイパッケージに含めたライブラリのようです。
二回目
1.14.0
なので、次はLayerのpython/lib/python3.8/site-packages
のようです。
三回目
ここまでの流れで予想できてしまいましたが、Layerのpython
のようです。
四回目
残りは一つなので、やる必要がなかったとも言えますが、デフォルトで入っているboto3が呼ばれています。
結果
- デプロイパッケージ
- Layerの
python/lib/python3.8/site-packages/
- Layerの
python
- デフォルトで入っているライブラリ
以上の結果になりました。
まとめ
以上、LambdaにおけるPythonのライブラリのロード順序を調べる話でした。
先日諸事情あって、Layerに古いバージョンのライブラリを入れることでデフォルトのライブラリを使わないようにする、という対応をしたので、ちょっと気になって調べてみました。
まぁ、これがわかって何か嬉しいことがあるのかわかりませんが、誰かの役にたったら幸いです。